import Vue from 'vue'
import Vuex from 'vuex'
import knowledge from './modules/knowledge'

Vue.use(Vuex)

/**
 * Vuex 状态管理
 */
export default new Vuex.Store({
  state: {
    // 笔记列表数据
    notes: [
      { id: 1, title: '开发计划', content: '完成后台管理系统的基本框架搭建', createTime: '2025-07-20 10:00:00' },
      { id: 2, title: '会议记录', content: '讨论了项目进度和下一步计划', createTime: '2025-07-21 14:30:00' },
      { id: 3, title: '学习笔记', content: 'Vue.js 高级特性和最佳实践', createTime: '2025-07-22 09:15:00' }
    ]
  },
  getters: {
    /**
     * 获取笔记列表
     * @param {Object} state - Vuex状态
     * @returns {Array} 笔记列表
     */
    getNotes: state => state.notes
  },
  mutations: {
    /**
     * 添加笔记
     * @param {Object} state - Vuex状态
     * @param {Object} note - 笔记对象
     */
    ADD_NOTE(state, note) {
      // 生成新ID (实际应用中应该由后端生成)
      const newId = state.notes.length > 0 ? Math.max(...state.notes.map(n => n.id)) + 1 : 1
      const newNote = {
        ...note,
        id: newId,
        createTime: new Date().toLocaleString()
      }
      state.notes.push(newNote)
    },
    
    /**
     * 更新笔记
     * @param {Object} state - Vuex状态
     * @param {Object} note - 更新的笔记对象
     */
    UPDATE_NOTE(state, note) {
      const index = state.notes.findIndex(n => n.id === note.id)
      if (index !== -1) {
        state.notes.splice(index, 1, {
          ...state.notes[index],
          ...note
        })
      }
    },
    
    /**
     * 删除笔记
     * @param {Object} state - Vuex状态
     * @param {Number} id - 笔记ID
     */
    DELETE_NOTE(state, id) {
      const index = state.notes.findIndex(n => n.id === id)
      if (index !== -1) {
        state.notes.splice(index, 1)
      }
    }
  },
  actions: {
    /**
     * 添加笔记
     * @param {Object} context - Vuex上下文
     * @param {Object} note - 笔记对象
     */
    addNote({ commit }, note) {
      // 这里可以添加API调用
      commit('ADD_NOTE', note)
    },
    
    /**
     * 更新笔记
     * @param {Object} context - Vuex上下文
     * @param {Object} note - 更新的笔记对象
     */
    updateNote({ commit }, note) {
      // 这里可以添加API调用
      commit('UPDATE_NOTE', note)
    },
    
    /**
     * 删除笔记
     * @param {Object} context - Vuex上下文
     * @param {Number} id - 笔记ID
     */
    deleteNote({ commit }, id) {
      // 这里可以添加API调用
      commit('DELETE_NOTE', id)
    }
  },
  modules: {
    // 知识库模块
    knowledge
  }
})
